#!/bin/bash

# 设置目标路径
TARGET_DIR="$1"
# 设置输出路径
OUTPUT_DIR="$TARGET_DIR"
# 设置最大处理文件数
MAX_FILES=10

# 创建输出目录（如果不存在）
mkdir -p "$OUTPUT_DIR"

# 计数器
COUNT=0

# 定义锁文件路径
lock_file="$TARGET_DIR/convert_video_script.lock"
# 检查锁文件是否存在
if [ -f "$lock_file" ]; then
    echo "脚本正在执行，请勿重复运行"
    exit 1
fi
# 创建锁文件
touch "$lock_file"
echo `date`

# 查找非 H.264 编码的视频文件
find "$TARGET_DIR" -type f \( -iname "*.ts" -o -iname "*.mp4" -o -iname "*.mkv" -o -iname "*.avi" -o -iname "*.mov" \) | while read -r file; do
    if [[ ! -f "$file" ]];then
        continue
    fi
    # 检查视频编码是否为 H.264
    codec=$(ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=nw=1:nk=1 "$file" | head -n 1)
    if [[ "$codec" != "h264" ]]; then
        echo start to process \"$file\"
        # 获取文件所在目录和文件名
        dir=$(dirname "$file")
        filename=$(basename "$file")


    # 清理之前未处理完的文件,使用 if 语句判断文件名是否以 converting- 开头
    if [[ $filename == converting-* ]]; then
        # 获取原始文件名，即去除 converting- 前缀
        original_name="${filename#converting-}"
        original_path="${dir}/$original_name"
        # 重命名文件
        mv "$file" "$original_path"
        echo "已将 $file 重命名为 $original_path"
        filename="$original_name"
        file="$original_path"
    fi
        # 重命名文件为 converting-{原始文件名}
        converting_file="$dir/converting-$filename"
        mv "$file" "$converting_file"

        # 设置输出文件路径
        output_file="$file"

        # 使用 ffmpeg 转换为 H.264
        echo "Converting $converting_file to $output_file..."
        if ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD129 -i "$converting_file" -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k "$output_file" ; then
            echo "*******************************************************************"
            echo "Conversion successful! Deleting original file: $converting_file"
            echo "*******************************************************************"
            # 获取源文件的权限
            source_permissions=$(stat -c "%a" "$converting_file")
            # 将源文件的权限应用到目标文件
            chmod "$source_permissions" "$output_file"
            rm "$converting_file"
        else
            echo "*******************************************************************"
            echo "Conversion failed! Restoring original file: $converting_file"
            echo ffmpeg -i \""$converting_file"\" -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k \""$output_file"\"
            echo "*******************************************************************"
            mv "$converting_file" "$file"
        fi

        # 计数已处理的文件
        ((COUNT++))
        if [[ $COUNT -ge $MAX_FILES ]]; then
            echo "Reached maximum number of files to process ($MAX_FILES). Exiting."
            break
        fi
        echo ""
        echo ""
        echo ""
        echo ""
    fi
done

echo "Processing complete!"
rm "$lock_file"
